import xml.etree.ElementTree as et
from conf.setting import FILE_PATH
from common.recordlog import logs

class OperXML:

    def read_xml(self,filename,tags,attr_value):
        """
        读取XML文件标签值
        :param filename:xml文件，仅文件名，不需要带路径
        :param tags:读取哪个xml的标签
        :param attr_value:标签中的属性，如id、name、class属性
        :return:
        """
        root=''

        #字典
        file_path={
            'file':FILE_PATH['XML']+'\\'+filename
        }
        try:
            """
            文档树：把整个文档看作树，如下，
            <html>
              <head>
                <title>页面标题</title>
              </head>
              <body>
                <p>这是一个段落。</p>
                <a href="http://example.com">链接</a>
              </body>
            </html>
            
            <html> 是根节点。
            <head> 和 <body> 是 <html> 的子节点，也是兄弟节点。
            <title> 是 <head> 的唯一子节点。
            <p> 和 <a> 都是 <body> 的子节点，同时它们也是兄弟节点。
            """
            # 获取整个XML文档树（XML类似HTML）
            tree=et.parse(file_path['file'])
            #获取xml根标签
            root=tree.getroot()
        except Exception as e:
            logs.error(e)

        #存储找到的符合条件的XML元素的文本内容
        child_text=''
        #遍历整个xml文件，找到tags元素
        for child in root.iter(tags):
            att=child.attrib

            #比较元素的属性值
            if ''.join(list(att.values()))==attr_value:
                child_text=child.text.strip()#去除文本内容两端的空白字符

            #检查当前元素是否有子元素，若有，继续遍历其子元素
            if child:
                for i in child:
                    attr=i.attrib
                    if ''.join(list(attr.values()))==attr_value:
                        child_text=i.text.strip()
        return child_text

    def get_attribute_value(self,filename,tags):
        """
        读取标签属性值
        :param filename:文件路径
        :param tags: xml标签名
        :return: dict格式
        """
        root=''
        file_path={
            'file':FILE_PATH['RESULTXML']+'\\'+filename
        }
        try:
            tree=et.parse(file_path['file'])
            root=tree.getroot()
        except Exception as e:
            logs.error(e)

        #从XML文档中所有匹配指定标签（tags）的元素中获取第一个元素的属性字典
        attr=[child.attrib for child in root.iter(tags)][0]
        return attr
